package com.yuexunxinxi.carefree.controller;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yuexunxinxi.carefree.entity.BTweet;
import com.yuexunxinxi.carefree.entity.vo.BTweetVo;
import com.yuexunxinxi.carefree.filter.SkipLogin;
import com.yuexunxinxi.carefree.service.b_tweet.BTweetService;
import com.yuexunxinxi.carefree.utils.R;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 作者: 李咨辰
 * 文件名: BTweetController.java
 * 路径: com.yuexunxinxi.carefree.controller
 * 时间: 2024-10-23 12:23
 * 版本: 1.0
 * 描述: TODO 文章/推文
 */
@RestController
@RequestMapping("/tweet")
public class BTweetController {
    /**
     * 调用业务层
     */
    @Resource
    private BTweetService bTweetService;

    /**
     * 根据当前登录用户和城市获取推文数量
     *
     * @param city 城市编号
     * @return 文章列表
     */
    @SkipLogin
    @GetMapping("/getTweetTotalByCity")
    @JsonSerialize(using = ToStringSerializer.class)
    public R getTweetTotalByCity(String city) {
        Long bTweetList = bTweetService.getTweetTotalByCity(city);
        return R.ok().put("data", bTweetList);
    }

    /**
     * 根据当前登录用户和城市获取推文
     *
     * @param userId   用户编号
     * @param city     城市编号
     * @param current  当前页
     * @param pageSize 没有条数
     * @return 文章列表
     */
    @SkipLogin
    @GetMapping("/getTweetByCity")
    @JsonSerialize(using = ToStringSerializer.class)
    public R getTweetByCity(Long userId, String city, int current, int pageSize) {
        if (!(userId != null && userId > 0)) {
            userId = 0L;
        }
        List<BTweetVo> bTweetList = bTweetService.getTweetByCity(userId, city, current, pageSize);
        return R.ok().put("data", bTweetList);
    }


    /**
     * 发布文章
     *
     * @param bTweet 文章对象
     * @return 成功返回true
     */
    @PostMapping("/addTweet")
    public R addTweet(@RequestBody BTweet bTweet) {
        return R.ok().put("data", bTweetService.addTweet(bTweet));
    }


    /**
     * 根据关注信息获取论坛调试
     *
     * @param userId 当前登录用户id
     * @return 关注的论坛条数
     */
    @GetMapping("/getTweetTotalByFollow")
    @JsonSerialize(using = ToStringSerializer.class)
    public R getTweetTotalByFollow(Long userId) {
        System.out.println(userId);
        if (!(userId != null && userId > 0)) {
            userId = 0L;
        }
        Long total = bTweetService.getTweetTotalByFollow(userId);

        return R.ok().put("data", total);
    }


    /**
     * 根据关注信息获取推文
     *
     * @param userId 用户编号
     * @return 文章列表
     */
    @GetMapping("/getTweetByFollow")
    @JsonSerialize(using = ToStringSerializer.class)
    public R getTweetByFollow(Long userId, int current, int pageSize) {
        System.out.println(userId);
        System.out.println(current);
        System.out.println(pageSize);
        if (!(userId != null && userId > 0)) {
            userId = 0L;
        }
        List<BTweetVo> bTweetVoList = bTweetService.getTweetByFollow(userId, current, pageSize);
        return R.ok().put("data", bTweetVoList);
    }


    /**
     * 获取论坛总条数
     *
     * @return 总条数
     */
    @SkipLogin
    @GetMapping("/getTweetAllTotal")
    public R getTweetAllTotal() {
        Long total = bTweetService.getTweetAllTotal();
        return R.ok().put("data", total);
    }


    /**
     * 获取论坛推荐数据
     *
     * @param userId   当前登录用户编号
     * @param current  当前页
     * @param pageSize 每页条数
     * @return 论坛列表
     */
    @SkipLogin
    @GetMapping("/getTweetAllList")
    @JsonSerialize(using = ToStringSerializer.class)
    public R getTweetAllList(Long userId, int current, int pageSize) {
        List<BTweetVo> bTweetVoList = bTweetService.getTweetAllList(userId, current, pageSize);
        return R.ok().put("data", bTweetVoList);
    }

    /**
     * 根据用户编号获取用户发布的文章总数
     *
     * @param userId 用户编号
     * @return 文章总数
     */
    @SkipLogin
    @GetMapping("/getTweetTotalByUserId")
    public R getTweetTotalByUserId(Long userId) {
        Integer total = bTweetService.getTweetTotalByUserId(userId);
        return R.ok(total);
    }

    /*
     * 根据用户编号获取用户发布的所有文章
     * @param userId 用户编号
     * @param current 当前页
     * @param pageSize 每页条数
     * @return 文章列表
     * */
    @SkipLogin
    @GetMapping("/getTweetByUserId")
    public R getTweetByUserId(Long userId, Integer current, Integer pageSize) {
        List<BTweetVo> bTweetVoList = bTweetService.getTweetByUserId(userId, current, pageSize);
        return R.ok().put("data", bTweetVoList);
    }
}
